# -*- coding: utf-8 -*-
# @Time    : 2024/7/18 18:06
# @Author  : yujiahao
# @File    : 43_fastapi_routers_items.py
# @description:APIRouter

"""
这个文件定义了与物品相关的路由和操作。
主要功能包括：
1. 创建物品：允许客户端通过 POST 请求创建一个新物品。
2. 获取物品列表：允许客户端通过 GET 请求获取物品列表，可以通过查询参数指定跳过的记录数和返回的记录数。
3. 获取单个物品：允许客户端通过 GET 请求获取指定 ID 的物品信息。
"""

from fastapi import APIRouter, HTTPException
from pydantic import BaseModel
from typing import List


# 定义 Pydantic 模型
class Item(BaseModel):
    """
    物品模型，用于表示物品数据。
    """
    id: int
    title: str
    description: str


class ItemCreate(BaseModel):
    """
    物品创建模型，用于接收创建物品的请求数据。
    """
    title: str
    description: str


# 创建 APIRouter 实例
router = APIRouter()

# 用于存储物品数据的内存数据结构
fake_items_db = []


# 创建物品的路由
@router.post("/", response_model=Item)
def create_item(item: ItemCreate):
    """
    创建一个新的物品。
    - **item**: 物品创建模型
    """
    new_item = Item(id=len(fake_items_db) + 1, title=item.title, description=item.description)
    fake_items_db.append(new_item)
    return new_item


# 获取物品列表的路由
@router.get("/", response_model=List[Item])
def read_items(skip: int = 0, limit: int = 10):
    """
    获取物品列表。
    - **skip**: 跳过的记录数量
    - **limit**: 返回的记录数量
    """
    return fake_items_db[skip: skip + limit]


# 获取单个物品的路由
@router.get("/{item_id}", response_model=Item)
def read_item(item_id: int):
    """
    获取单个物品信息。
    - **item_id**: 物品ID
    """
    for item in fake_items_db:
        if item.id == item_id:
            return item
    raise HTTPException(status_code=404, detail="Item not found")
